if info.name:
self.domain_by_name[info.name] = info
self.sync_domain(info.id)
- if notify: eserver.inject('xend.domain.created', [info.name, info.id])
+ if notify: eserver.inject('xend.domain.create', [info.name, info.id])
def _delete_domain(self, id, notify=1):
"""Remove a domain from the tables.
self._add_domain(dominfo)
return dominfo
log.info("Restarting domain: id=%s name=%s", dominfo.id, dominfo.name)
+ eserver.inject("xend.domain.restart",
+ [dominfo.name, dominfo.id, "begin"])
deferred = dominfo.restart()
deferred.addCallback(cbok)
return deferred
self.restarts_by_name[dominfo.name] = dominfo
self.restarts_by_id[dominfo.id] = dominfo
log.info('Scheduling restart for domain: name=%s id=%s', dominfo.name, dominfo.id)
+ eserver.inject("xend.domain.restart",
+ [dominfo.name, dominfo.id, "schedule"])
self.domain_restarts_schedule()
def domain_restart_cancel(self, id):
dominfo = self.restarts_by_id.get(id) or self.restarts_by_name.get(id)
if dominfo:
log.info('Cancelling restart for domain: name=%s id=%s', dominfo.name, dominfo.id)
+ eserver.inject("xend.domain.restart",
+ [dominfo.name, dominfo.id, "cancel"])
dominfo.restart_cancel()
del self.restarts_by_id[dominfo.id]
del self.restarts_by_name[dominfo.name]
try:
def cbok(dominfo):
log.info('Restarted domain name=%s id=%s', dominfo.name, dominfo.id)
+ eserver.inject("xend.domain.restart",
+ [dominfo.name, dominfo.id, "success"])
self.domain_unpause(dominfo.id)
def cberr(err):
log.exception("Delayed exception restarting domain: name=%s id=%s",
dominfo.name, dominfo.id)
+ eserver.inject("xend.domain.restart",
+ [dominfo.name, dominfo.id, "fail"])
+
deferred = self.domain_restart(dominfo)
deferred.addCallback(cbok)
deferred.addErrback(cberr)
except:
log.exception("Exception restarting domain: name=%s id=%s",
dominfo.name, dominfo.id)
+ eserver.inject("xend.domain.restart",
+ [dominfo.name, dominfo.id, "fail"])
if self.domain_restarts_exist():
# Run again later if any restarts remain.
self.refresh_schedule(delay=5)
# Don't forget to cancel restart for it.
dominfo = self.domain_lookup(id)
xmigrate = XendMigrate.instance()
- val = xmigrate.migrate_begin(dominfo.id, dst, live=live)
+ val = xmigrate.migrate_begin(dominfo, dst, live=live)
return val
def domain_save(self, id, dst, progress=0):
"""
dominfo = self.domain_lookup(id)
xmigrate = XendMigrate.instance()
- return xmigrate.save_begin(dominfo.id, dst)
+ return xmigrate.save_begin(dominfo, dst)
def domain_pincpu(self, id, cpu):
"""Pin a domain to a cpu.
"""Representation of a migrate in-progress and its interaction with xfrd.
"""
- def __init__(self, xid, dom, host, port, live):
+ def __init__(self, xid, dominfo, host, port, live):
XfrdInfo.__init__(self)
self.xid = xid
+ self.dominfo = dominfo
self.state = 'begin'
self.src_host = socket.gethostname()
- self.src_dom = dom
+ self.src_dom = dominfo.id
self.dst_host = host
self.dst_port = port
self.dst_dom = None
xfrd.loseConnection()
return
log.info('Migrate BEGIN: ' + str(self.sxpr()))
- eserver.inject('xend.migrate.begin', self.sxpr())
+ eserver.inject('xend.domain.migrate',
+ [ self.dominfo.name, self.dominfo.id,
+ "begin", self.sxpr() ])
xfrd.request(['xfr.migrate',
self.src_dom,
vmconfig,
XfrdInfo.connectionLost(self, reason)
if self.state =='ok':
log.info('Migrate OK: ' + str(self.sxpr()))
- eserver.inject('xend.migrate.ok', self.sxpr())
else:
self.state = 'error'
self.error(XendError("migrate failed"))
log.info('Migrate ERROR: ' + str(self.sxpr()))
- eserver.inject('xend.migrate.error', self.sxpr())
+ eserver.inject('xend.domain.migrate',
+ [ self.dominfo.name, self.dominfo.id,
+ self.state, self.sxpr() ])
class XendSaveInfo(XfrdInfo):
"""Representation of a save in-progress and its interaction with xfrd.
"""
- def __init__(self, xid, dom, file):
+ def __init__(self, xid, dominfo, file):
XfrdInfo.__init__(self)
self.xid = xid
+ self.dominfo = dominfo
self.state = 'begin'
- self.src_dom = dom
+ self.src_dom = dominfo.id
self.file = file
self.start = 0
return
print '***request> begin'
log.info('Save BEGIN: ' + str(self.sxpr()))
- eserver.inject('xend.save.begin', self.sxpr())
+ eserver.inject('xend.domain.save',
+ [self.dominfo.name, self.dominfo.id,
+ "begin", self.sxpr()])
xfrd.request(['xfr.save', self.src_dom, vmconfig, self.file ])
def xfr_save_ok(self, xfrd, val):
XfrdInfo.connectionLost(self, reason)
if self.state =='ok':
log.info('Save OK: ' + str(self.sxpr()))
- eserver.inject('xend.save.ok', self.sxpr())
else:
self.state = 'error'
self.error(XendError("save failed"))
log.info('Save ERROR: ' + str(self.sxpr()))
- eserver.inject('xend.save.error', self.sxpr())
+ eserver.inject('xend.domain.save',
+ [ self.dominfo.name, self.dominfo.id,
+ self.state, self.sxpr() ])
class XendMigrate:
reactor.connectTCP('localhost', XFRD_PORT, xcf)
return info.deferred
- def migrate_begin(self, dom, host, port=XFRD_PORT, live=0):
+ def migrate_begin(self, dominfo, host, port=XFRD_PORT, live=0):
"""Begin to migrate a domain to another host.
- @param dom: domain
+ @param dominfo: domain info
@param host: destination host
@param port: destination port
@return: deferred
"""
xid = self.nextid()
- info = XendMigrateInfo(xid, dom, host, port, live)
+ info = XendMigrateInfo(xid, dominfo, host, port, live)
return self.session_begin(info)
- def save_begin(self, dom, file):
+ def save_begin(self, dominfo, file):
"""Begin saving a domain to file.
- @param dom: domain
+ @param dominfo: domain info
@param file: destination file
@return: deferred
"""
xid = self.nextid()
- info = XendSaveInfo(xid, dom, file)
+ info = XendSaveInfo(xid, dominfo, file)
return self.session_begin(info)
def instance():